package cn.iocoder.yudao.module.chat.service.template;

import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.iocoder.yudao.module.chat.dal.dataobject.gpt.GPTTemplateDO;
import cn.iocoder.yudao.module.chat.dal.mysql.GPTTemplateMapper;
import cn.iocoder.yudao.module.chat.enums.ErrorCodeConstants;
import com.unfbx.chatgpt.entity.chat.Message;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;

@Service
public class GPTTemplateServiceImpl implements GPTTemplateService{

    @Resource
    private GPTTemplateMapper gptTemplateMapper;
    @Override
    public List<Message> findGPTTemplateById(Long templateId) {

    //TODO 缓存

        GPTTemplateDO gptTemplateDO = gptTemplateMapper.selectById(templateId);
        String templateContent = gptTemplateDO.getTemplateContent();
        if(checkFormats(templateContent)){
            throw exception(ErrorCodeConstants.GPT_TEMPLATE_BAD_FORMAT);
        }
        List<Message> messages = new ArrayList<>();
        JSONArray jsonArray = JSONUtil.parseArray(templateContent);
        for(int i = 0; i < jsonArray.size(); i++){
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            Message.Role role = jsonObject.getEnum(Message.Role.class, "role");
            Message message = Message.builder().role(role).content(jsonObject.getStr("content")).build();
            messages.add(message);
        }
        return messages;
    }
    private boolean checkFormats(String templateContent){
        return JSONUtil.isTypeJSONArray(templateContent);
    }
}
